home *** CD-ROM | disk | FTP | other *** search
- #ifndef __LOGINTERFACE__
- #define __LOGINTERFACE__ 1
-
- #include <Types.h>
- #include <MixedMode.h>
- #include <Processes.h>
- #include <stdarg.h>
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- typedef pascal long (*LoggerCallbackProcPtr)( void* logInfoPtr, long message, long p1, long p2, long p3 );
-
- enum {
- uppLoggerDefProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void*)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr LoggerDefUPP;
-
- #define CallLoggerCallbackProc(userRoutine, logInfoPtr, message, p1, p2, p3 ) \
- CallUniversalProc((UniversalProcPtr) (userRoutine), uppLoggerDefProcInfo, logInfoPtr, message, (p1), (p2), (p3) )
- #define NewLoggerCallbackProc(userRoutine) \
- (ControlDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppLoggerDefProcInfo, GetCurrentISA())
- #else
- typedef LoggerCallbackProcPtr LoggerDefUPP;
-
- #define CallLoggerCallbackProc(userRoutine, logInfoP, message, p1, p2, p3 ) \
- (*(userRoutine))( logInfoP, message, p1, p2, p3 )
- #define NewLoggerCallbackProc(userRoutine) \
- (LoggerDefUPP)(userRoutine)
- #endif
-
- #define kLogInterfaceSignature 'KSDb'
- #define kLogInterfaceVersion 2
- #define kMaxFlags 100
-
- typedef struct
- {
- OSType signature;
- unsigned long version;
-
- LoggerDefUPP callbackUPP;
-
- Ptr ringBuffer;
- unsigned long inOffset;
- unsigned long outOffset;
- unsigned long ringSize;
-
- Boolean dataLost;
- unsigned long dataChanged;
-
- Boolean clearText;
-
- Boolean flags[ kMaxFlags ];
-
- ProcessSerialNumber debugAppPSN;
-
- long debugAppA5; // Not used for PowerPC, but still in struct for alignment
- } LogInterfaceRec, *LogInterfacePtr;
-
- enum LoggerMessage {
- insertMsg = 0x100,
- removeMsg,
- getDataInRingSizeMsg,
- getRingDataLostMsg,
- getRingChangedCountMsg,
- clearMsg,
- printfRingMsg,
- getFlagMsg,
- setFlagMsg,
- insertHexDumpMsg
- };
-
- #define INSERTINTORING(logP,data,size) \
- { \
- if ( logP && logP->callbackUPP ) \
- CallLoggerCallbackProc ( logP->callbackUPP, logP, insertMsg, (long) data, (long) size, (long) 0 ); \
- }
-
- #define REMOVEFROMRING \
- ( ( logP && logP->callbackUPP ) ? \
- CallLoggerCallbackProc ( logP->callbackUPP, logP, insertMsg, (long) data, (long) size, (long) 0 ); \
- : 0 )
-
-
- void InsertIntoRing ( LogInterfacePtr logP, const void* data, unsigned long dataSize );
- void InsertHexDumpIntoRing ( LogInterfacePtr logP, const void* data, unsigned long size );
- void PrintfRing ( LogInterfacePtr logP, const char* formatStr, ... );
- void vPrintfRing ( LogInterfacePtr logP, const char* formatStr, va_list* args );
-
- unsigned long RemoveFromRing ( LogInterfacePtr logP, void* data, unsigned long dataSize );
-
- unsigned long GetDataInRingSize ( LogInterfacePtr logP );
-
- Boolean GetRingDataLost ( LogInterfacePtr logP );
- unsigned long GetRingChangedCount ( LogInterfacePtr logP );
-
- void ClearText ( LogInterfacePtr logP );
-
- LogInterfacePtr CreateLogInterfacePtr ( LoggerDefUPP callback );
- LogInterfacePtr GetLogInterfacePtr ( );
- void DisposeLogInterfacePtr ( );
-
- Boolean GetFlagValue ( LogInterfacePtr logP, unsigned long whichFlag );
- void SetFlagValue ( LogInterfacePtr logP, unsigned long whichFlag, Boolean value );
-
- void Debug ( char* format, ... );
- void DebugF ( unsigned short flag, char* format, ... );
-
- #ifdef __cplusplus
- };
- #endif
-
-
- #endif // __LOGINTERFACE__